<?php

//****************************************************************************
// Accessors
//****************************************************************************
	/////////////////////////////////////////////////////////////
	//
	//Gets the Font
	//
	/////////////////////////////////////////////////////////////
		function getstrfont($text)
		{
			if($text[0]=='%'){return $text[2];}
			else {return 3;}
		}
	
	/////////////////////////////////////////////////////////////
	//
	//Gets the string's length without the formatting data
	//
	/////////////////////////////////////////////////////////////
		function getstrlen($text="")
		{
			if($text[0]=='%'){return strlen($text)-3;}
			else{return strlen($text);}
		}
	
	/////////////////////////////////////////////////////////////
	//
	//Gets the string's alignment
	//
	/////////////////////////////////////////////////////////////
		function getstralign($text="")
		{
			if($text[0]=='%'){return $text[1];}
			else {return 'r';}
		}
	
	/////////////////////////////////////////////////////////////
	//
	//Gets the string's text without the formatting data
	//
	/////////////////////////////////////////////////////////////
		function getstrtext($text="")
		{
			if($text[0]=='%'){return substr($text,3);}
			else {return $text;}
		}

		
//****************************************************************************
// Formatting
//****************************************************************************
	/////////////////////////////////////////////////////////////
	//
	//Aligns text to the Center
	//
	/////////////////////////////////////////////////////////////
		function alignTextCenter(&$image, $text, $textcolor, $pos_y, $fontnum=3)
		{
			imagestring($image, $fontnum, round((imagesx($image)-(imagefontwidth($fontnum)*getstrlen($text)))/2), $pos_y, $text, $textcolor);
		}
	/////////////////////////////////////////////////////////////
	//
	//Aligns text to the Right
	//
	/////////////////////////////////////////////////////////////
		function alignTextRight(&$image, $text, $textcolor, $pos_y, $fontnum=3)
		{
			imagestring($image, $fontnum, 10, $pos_y, $text, $textcolor);
		}
	/////////////////////////////////////////////////////////////
	//
	//Aligns text to the Left
	//
	/////////////////////////////////////////////////////////////
		function alignTextLeft(&$image, $text, $textcolor, $pos_y, $fontnum=3)
		{
			imagestring($image, $fontnum, round((imagesx($image)-(imagefontwidth($fontnum)*getstrlen($text))))-10, $pos_y, $text, $textcolor);
		}
	
//****************************************************************************
// Image Size
//****************************************************************************
	/////////////////////////////////////////////////////////////
	//
	//Gets the width of the image depending on the longest string.
	//
	/////////////////////////////////////////////////////////////
		function getimagex($textstuff, $min=400)
		{
			$min_x=$min;
			for($x=0;$x<count($textstuff);$x++)
			{
				$tempsize=imagefontwidth(getstrfont($textstuff[$x]))*getstrlen($textstuff[$x])+20;
				if($tempsize>$min_x)
				{
					$min_x=$tempsize;
				}
			}
			return $min_x;
		}
	
	/////////////////////////////////////////////////////////////
	//
	//Gets the height of the image according to the number of lines.
	//
	/////////////////////////////////////////////////////////////
		function getimagey($textstuff, $min=100)
		{
			$min_y=30;
			for($x=0;$x<count($textstuff);$x++)
			{
				$min_y+=(imagefontheight(getstrfont($textstuff[$x]))+2);
			}
			if($min_y<$min){$min_y=$min;}
			return $min_y;
		}



		
//****************************************************************************
// Putting it all together
//****************************************************************************
	/////////////////////////////////////////////////////////////
	//
	// Adds all the strings to the image.
	//
	/////////////////////////////////////////////////////////////
		function makeSignatureImage($textarray)
		{
			$imheight=getimagey($textarray);
			$imwidth=getimagex($textarray);
			$image = @imagecreate($imwidth, $imheight)or die("Cannot Initialize new GD image stream");
			$bg = $textarray['background'];
			$background_color = imagecolorallocate($image, $bg['r'], $bg['b'], $bg['g']);
			$fg = $textarray['foreground'];
			$foreground = imagecolorallocate($image, $fg['r'], $fg['b'], $fg['g']);
			$posY=10;
			for($x=0;$x<count($textarray);$x++)
			{
				switch(getstralign($textarray[$x]))
				{
					case 'c':
					{
						alignTextCenter($image,getstrtext($textarray[$x]),$foreground,$posY,getstrfont($textarray[$x]));
					}break;
					
					case 'l':
					{
						alignTextLeft($image,getstrtext($textarray[$x]),$foreground,$posY,getstrfont($textarray[$x]));
					}break;
					
					case 'r':
					{
						alignTextRight($image,getstrtext($textarray[$x]),$foreground,$posY,getstrfont($textarray[$x]));
					}break;
					
					default:
					{
						alignTextRight($image,getstrtext($textarray[$x]),$foreground,$posY,getstrfont($textarray[$x]));
					}break;
				}
				$posY+=imagefontheight(getstrfont($textarray[$x]));
			}
			alignTextCenter($image, "Generated by Fimion's Sig Script", $foreground,(imagesy($image)-imagefontheight($fontchoice)-1),1);
			//output the image
			header("Content-type: image/png");
			header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
			header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
			header("Cache-Control: no-store, no-cache, must-revalidate");
			header("Cache-Control: post-check=0, pre-check=0", false);
			header("Pragma: no-cache");
			imagepng($image);
			imagedestroy($image);
		}
?>